package com.huirui.server.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.huirui.server.pojo.entity.Product;
import com.huirui.server.pojo.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * @author yujun
 * @description 针对表【t_product(商品主表)】的数据库操作Mapper
 * @createDate 2025-09-16 18:02:04
 * @Entity com.huirui.server.pojo.entity.Product
 */
public interface ProductMapper extends BaseMapper<Product> {
    /**
     * 分页查询商品信息
     *
     * @param pageParam 分页参数
     * @param keyword   搜索关键词
     * @return 分页商品列表
     */
    IPage<ProductBriefInfoVo> selectProductsByComprehensive(@Param("keyword") String keyword, Page<ProductBriefInfoVo> pageParam);

    IPage<ProductBriefInfoVo> selectProductsBySales(@Param("keyword") String keyword, Page<ProductBriefInfoVo> pageParam);

    IPage<ProductBriefInfoVo> selectProductsByTime(@Param("keyword") String keyword, Page<ProductBriefInfoVo> pageParam);

    IPage<ProductBriefInfoVo> selectProductsByPrice(@Param("keyword") String keyword, @Param("orderBy") String orderBy, Page<ProductBriefInfoVo> pageParam);

    List<ProductBriefInfoVo> listProductBriefInfoVoByIds(List<Long> ids);

    IPage<ProductBriefInfoVo> listBestseller(Page<ProductBriefInfoVo> iPage);

    IPage<ProductVo> getProductList(String option, IPage<ProductVo> iPage);

    IPage<ProductVo> searchProduct(
            @Param("productName") String productName,
            @Param("productCode") String productCode,
            @Param("status") String status,
            @Param("categoryIds") Set<Long> categoryIds,
            @Param("productType") Long productType,
            IPage<ProductVo> ipage);

    List<SimpleProductVo> searchBriefProductInfo(@Param("keyword") String keyword);

    List<CouponProductVo> listCouponProductInfo(@Param("ids") List<Long> productIds);


    IPage<SeckillProductVo> listSeckillProductInfo(@Param("keyword") String keyword, @Param("activityId") Long activityId, IPage<SeckillProductVo> iPage);

    List<SeckillProductVo> listSeckillProductInfoByProductIds(@Param("productIds") List<Long> productIds);

    List<HotSalesRankingProductVo> getHotSalesRankingProducts(@Param("id") Integer id);

    IPage<HomePageProductVo> listHomePageProduct(@Param("categoryIdList") List<Long> threeLevelCategoryIdList, IPage<HomePageProductVo> ipage);


    IPage<HomePageProductVo> personalizedListHomePageProduct(IPage<HomePageProductVo> ipage);

    IPage<ProductEchoVo> listProductByKeyWordAndComprehensive(@Param("keyword") String keyword, IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByKeyWordAndSalesAmount(@Param("keyword") String keyword, IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByKeyWordAndPriceAsc(@Param("keyword") String keyword, IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByKeyWordAndPriceDesc(@Param("keyword") String keyword, IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByKeyWordAndDateIssued(@Param("keyword") String keyword, IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByBrandIdAndComprehensive(@Param("brandId") Long aLong, IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByBrandIdAndSalesAmount(@Param("brandId") Long aLong, IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByBrandIdAndPriceAsc(@Param("brandId") Long aLong, IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByBrandIdAndPriceDesc(@Param("brandId") Long aLong, IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByBrandIdAndDateIssued(@Param("brandId") Long aLong, IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByCategoryIdsAndComprehensive(@Param("categoryIds") List<Long> categoryIds, IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByCategoryIdsAndSalesAmount(@Param("categoryIds") List<Long> categoryIds, @Param("iPage") IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByCategoryIdsAndPriceAsc(@Param("categoryIds") List<Long> categoryIds, @Param("iPage") IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByCategoryIdsAndPriceDesc(@Param("categoryIds") List<Long> categoryIds, @Param("iPage") IPage<ProductEchoVo> iPage);

    IPage<ProductEchoVo> listProductByCategoryIdsAndDateIssued(@Param("categoryIds") List<Long> categoryIds, @Param("iPage") IPage<ProductEchoVo> iPage);


    IPage<ProductListInfoVo> listProduct(
            @Param("productId") Long productId,
            @Param("productName") String productName,
            @Param("productType") Integer productType,
            @Param("productStatus") Integer productStatus,
            @Param("brandName") String brandName,
            @Param("iPage") IPage<ProductListInfoVo> iPage
    );

    IPage<ProductListInfoVo> listProductWithCategoryIds(
            @Param("productId") Long productId,
            @Param("productName") String productName,
            @Param("productType") Integer productType,
            @Param("productStatus") Integer productStatus,
            @Param("brandName") String brandName,
            @Param("categoryIds") List<Long> categoryIds,
            @Param("iPage") IPage<ProductListInfoVo> iPage
    );

    OrderItemInfoVo queryOrderPrepareInfo(@Param("productId") Long productId, @Param("productSpecificationId") Long productSpecificationId);

}




